
import { ExceptionFilter, Catch, ArgumentsHost, HttpException, HttpStatus } from '@nestjs/common';

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp()
    const response = ctx.getResponse()
    const { code, result } = this.errorResult(exception)
    response.header('Content-Type', 'application/json; charset=utf-8')
    response.status(code).json(result)
  }

  /**
   * 根据传入的异常对象生成错误结果
   * @param exception - 未知类型的异常对象，可能是任意类型的异常
   * @returns 包含 HTTP 状态码和错误信息的对象
   */
  errorResult(exception: HttpException) {
    // 如果是http报错，如果是则获取其状态码，否则默认使用 500 内部服务器错误状态码
    const code =  HttpStatus.INTERNAL_SERVER_ERROR ;
    console.log('我要报错了',exception.getStatus());
    
    // 定义错误消息变量，用于存储最终的错误信息
    let message: string;

    const response = exception.getResponse();
    // 尝试从响应内容中提取 message 字段作为错误消息，如果没有则直接使用响应内容
    message = (response as any).message ?? response;

    return {
      code,
      result: {
        message,
        code
      },
    };
  }
}